import pickle,base64
from django_redis import get_redis_connection

def merge_cart_cookie_to_redis(request,response,user):
    # 合并购物车

    # 获取cookie
    cart_cookie = request.COOKIES.get('cart_cookie', None)

    # 判断cookie是否存在
    if not cart_cookie:
        return response

    # 存在 取值  # 解密取值
    data = pickle.loads(base64.b64decode(cart_cookie.encode()))

    if data:

        """
        {
            sku_id:{
                'count':10
                sleleted:True
            }
        }
        """

        # 拆分字典数据
        # 字典保存hash类型  {sku_id:count,sku_id2:count}
        cart = {}
        # 列表保存选中状态
        cart_selected = []  # 选中状态
        cart_selected_no = []  # 未选中状态

        for sku_id, cart_dict in data.items():
            cart[sku_id] = cart_dict['count']
            if cart_dict['selected']:
                cart_selected.append(sku_id)
            else:
                cart_selected_no.append(sku_id)

        # 写入到缓存中
        # 建立连接
        conn = get_redis_connection('cart')
        # 写入hash类型
        conn.hmset('cart_%s' % user.id, cart)
        #hmset设置 key 指定的哈希集中指定字段的值。该命令将重写所有在哈希集中
        #存在的字段,也就是说当有原有哈希数据中存在与该字典中相同的字段时，将被忽略，以该字典中的值为准。如果 key 指定的哈希集不存在，会创建一个新的哈希集并与 key 关联
        # 写入集合数据
        if cart_selected:
            conn.sadd('cart_selected_%s' % user.id, *cart_selected)
        if cart_selected_no:
            conn.srem('cart_selected_%s' % user.id, *cart_selected_no)

    # 删除cookie
    response.delete_cookie('cart_cookie')

    # 结果返回
    return response